package factory;

import java.util.HashMap;
import java.util.Map;

//泛型化的 单例工厂
public class SingleFacory {
    private static Map<Class, Object> objectMap = new HashMap<>();

    private SingleFacory() {
    }

    public static <T> T getSingle(Class clazz) {
        Object obj = objectMap.get(clazz);
        if (obj == null) {
            synchronized (clazz) {
                try {
                    obj = clazz.newInstance();
                    objectMap.put(clazz,obj);
                } catch (InstantiationException | IllegalAccessException e) {
                    e.printStackTrace();
                }
            }
        }
        return (T) clazz.cast(obj);
    }
}
/*
 * 需求：根据传过来的类 .class 文件 获取生成一个实例对象
 * 传过来什么 就生成什么类对象。
 * 保证线程安全。
 *
 *
 * */